## [1] "C:/Users/jonat/OneDrive - University of Southern California/Github/jga"
The goal of this file is to compare the transcriptional profile of our Contractile cell dataset (INTACT) with Humphrey’s (DKD) as well as creating figures accordingly.
Th
population_colors <- c(
"Pericyte" = "#66C2A5",
"Efferent VSMC" = "#FC8D62",
"Afferent VSMC" = "#8DA0CB",
"Renin Cell" = "#E78AC3",
"EG Mesangial Cell" = "#A6D854",
"IG Mesangial Cell" = "#FFD92F"
)
light_population_colors <- c(
"Pericyte" = "#A8D8C5", # Lighter Pericyte
"Efferent VSMC" = "#FDBF96", # Lighter Efferent VSMC
"Afferent VSMC" = "#B8C9E1", # Lighter Afferent VSMC
"Renin Cell" = "#F2A4D6", # Lighter Renin Cell
"EG Mesangial Cell" = "#B9E09B", # Lighter EG Mesangial Cell
"IG Mesangial Cell" = "#FFEB88" # Lighter IG Mesangial Cell
)
very_light_population_colors <- c(
"Pericyte" = "#D4EDE4", # Very light Pericyte
"Efferent VSMC" = "#FFE0CC", # Very light Efferent VSMC
"Afferent VSMC" = "#DEE5F2", # Very light Afferent VSMC
"Renin Cell" = "#F8D3E8", # Very light Renin Cell
"EG Mesangial Cell" = "#DDF2C7", # Very light EG Mesangial Cell
"IG Mesangial Cell" = "#FFF4C2" # Very light IG Mesangial Cell
)SO.INTACT <- readRDS(here("Datasets", "renamed", "INTACT_JGA_renamed.rds"))
DimPlot(SO.INTACT, group.by = "class.JGA", cols = population_colors)SO.DKD <- readRDS(here("Datasets", "renamed", "DKD_JGA_renamed.rds"))
Idents(SO.DKD) <- SO.DKD@meta.data$class.JGA
DimPlot(SO.DKD, group.by = "class.JGA", cols = light_population_colors, reduction = "umap")markers_result <- list()
clusters <- unique(SO.INTACT$class.JGA)
for (i in clusters) {
# Replace spaces with underscores in cluster names
clean_name <- gsub(" ", "_", i)
# Find markers for the cluster
markers <- FindMarkers(SO.INTACT, ident.1 = i, group.by = "class.JGA", min.pct = 0.1, logfc.threshold = 0.25)
markers <- markers %>%
rownames_to_column(var = "gene") %>%
arrange(desc(avg_log2FC))
markers_result[[clean_name]] <- markers
# Create variable name without spaces
var_name <- paste0(clean_name, ".INTACT.markers")
assign(var_name, markers, envir = .GlobalEnv)
}markers_result <- list()
clusters <- unique(SO.DKD$class.JGA)
for (i in clusters) {
clean_name <- gsub(" ", "_", i)
markers <- FindMarkers(SO.DKD, ident.1 = i, group.by = "class.JGA", min.pct = 0.1, logfc.threshold = 0.25)
markers <- markers %>%
rownames_to_column(var = "gene") %>%
arrange(desc(avg_log2FC))
markers_result[[clean_name]] <- markers
var_name <- paste0(clean_name, ".DKD.markers")
assign(var_name, markers, envir = .GlobalEnv)
}INTACT_list <- list(`Pericyte.INTACT.markers`, `Renin_Cell.INTACT.markers`, `Efferent_VSMC.INTACT.markers`, `Afferent_VSMC.INTACT.markers`, `IG_Mesangial_Cell.INTACT.markers`, `EG_Mesangial_Cell.INTACT.markers`)
DKD_list <- list(`Pericyte.DKD.markers`, `Renin_Cell.DKD.markers`, `Efferent_VSMC.DKD.markers`, `Afferent_VSMC.DKD.markers`, `IG_Mesangial_Cell.DKD.markers`, `EG_Mesangial_Cell.DKD.markers`)
names(INTACT_list) <- c("Pericyte.INTACT.markers", "Renin Cell.INTACT.markers", "Efferent VSMC.INTACT.markers", "Afferent VSMC.INTACT.markers", "IG_Mesangial_Cell.INTACT.markers", "EG_Mesangial_Cell.INTACT.markers")
names(DKD_list) <- c("Pericyte.DKD.markers", "Renin Cell.DKD.markers", "Efferent VSMC.DKD.markers", "Afferent VSMC.DKD.markers", "IG_Mesangial_Cell.DKD.markers", "EG_Mesangial_Cell.DKD.markers")library(dplyr)
library(ggplot2)
library(ggrepel)
library(broom)
# Initialize table for storing R-squared values and slopes
rsq_table <- data.frame(matrix(ncol = 7, nrow = (length(INTACT_list) * length(DKD_list))))
names(rsq_table) <- c("INTACT", "DKD", "R-squared", "Slope", "Shared_DEGs", "INTACT_UniqueDEGs", "DKD_UniqueDEGs")
# List to store scatterplots
scatterplots <- list()
## START FOR {LOOP} LEVEL 1 ##
for (i in 1:length(INTACT_list)) {
x.markers <- INTACT_list[[i]]
x.markers_tb <- x.markers %>%
data.frame() %>%
as_tibble()
## START FOR {LOOP} LEVEL 2 ##
for (j in 1:length(DKD_list)) {
y.markers <- DKD_list[[j]]
y.markers_tb <- y.markers %>%
data.frame() %>%
as_tibble()
# X-Y DEGs Intersection Table
xy.comp <- inner_join(x.markers_tb, y.markers_tb, by = "gene")
# Ensure enough genes exist for regression
if(nrow(xy.comp) > 1) {
# Selecting only relevant columns
xy.comp.R2 <- xy.comp %>%
dplyr::select(avg_log2FC.x, avg_log2FC.y)
# Correct regression model
model <- lm(avg_log2FC.y ~ avg_log2FC.x, data = xy.comp.R2)
# Extract slope and correct R² calculation
slope <- coef(model)["avg_log2FC.x"]
n_rsq <- summary(model)$r.squared
} else {
slope <- NA
n_rsq <- NA # Not enough data for a valid regression
}
# Calculate DEGs counts
Shared_DEGs <- nrow(xy.comp)
INTACT_UniqueDEGs <- nrow(x.markers_tb) - Shared_DEGs
DKD_UniqueDEGs <- nrow(y.markers_tb) - Shared_DEGs
# Add to R-squared table
index <- ((i-1) * length(DKD_list)) + j
rsq_table[index, 1] = names(INTACT_list)[i]
rsq_table[index, 2] = names(DKD_list)[j]
rsq_table[index, 3] = n_rsq
rsq_table[index, 4] = slope # Adding the slope to the table
rsq_table[index, 5] = Shared_DEGs
rsq_table[index, 6] = INTACT_UniqueDEGs
rsq_table[index, 7] = DKD_UniqueDEGs
# Generate Scatterplot for each pair
p <- ggplot(xy.comp, aes(x = avg_log2FC.x, y = avg_log2FC.y, label = gene)) +
geom_point(color = "#636EFA", alpha = 0.6, size = 2.5) + # Blue dots with transparency
geom_smooth(method = "lm", color = "#1E90FF", linetype = "dashed", se = FALSE) + # Best-fit regression line
geom_text_repel(size = 4, segment.size = 0.2, segment.color = "grey50") + # Gene labels
annotate("text", x = min(xy.comp$avg_log2FC.x) + 0.2,
y = max(xy.comp$avg_log2FC.y) - 0.2,
label = paste0("R² = ", round(n_rsq, 3), "\nSlope = ", round(slope, 3)),
color = "black", size = 6, hjust = 0) +
labs(
title = paste(names(INTACT_list)[i], "vs", names(DKD_list)[j]),
x = paste("avg_log2FC -", names(INTACT_list)[i]),
y = paste("avg_log2FC -", names(DKD_list)[j])
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.title = element_text(face = "bold"),
axis.line = element_line(color = "black", size = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
# Store the plot
scatterplots[[paste(names(INTACT_list)[i], names(DKD_list)[j], sep = "_vs_")]] <- p
}
}
# Sort and print the R-squared table
rsq_table <- rsq_table %>%
arrange(desc(`R-squared`))
print(rsq_table)## INTACT DKD R-squared
## 1 EG_Mesangial_Cell.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.862647841
## 2 Afferent VSMC.INTACT.markers Afferent VSMC.DKD.markers 0.831247531
## 3 Pericyte.INTACT.markers Pericyte.DKD.markers 0.819457192
## 4 Renin Cell.INTACT.markers Renin Cell.DKD.markers 0.803010100
## 5 IG_Mesangial_Cell.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.790403442
## 6 Efferent VSMC.INTACT.markers Efferent VSMC.DKD.markers 0.740385139
## 7 EG_Mesangial_Cell.INTACT.markers Efferent VSMC.DKD.markers 0.668994890
## 8 Renin Cell.INTACT.markers Pericyte.DKD.markers 0.572277895
## 9 IG_Mesangial_Cell.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.537229255
## 10 IG_Mesangial_Cell.INTACT.markers Efferent VSMC.DKD.markers 0.504824403
## 11 Efferent VSMC.INTACT.markers Afferent VSMC.DKD.markers 0.480773225
## 12 EG_Mesangial_Cell.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.457437589
## 13 EG_Mesangial_Cell.INTACT.markers Pericyte.DKD.markers 0.426273266
## 14 Afferent VSMC.INTACT.markers Pericyte.DKD.markers 0.387702919
## 15 EG_Mesangial_Cell.INTACT.markers Afferent VSMC.DKD.markers 0.352703716
## 16 IG_Mesangial_Cell.INTACT.markers Pericyte.DKD.markers 0.288119271
## 17 Pericyte.INTACT.markers Afferent VSMC.DKD.markers 0.260040018
## 18 Efferent VSMC.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.259354907
## 19 Pericyte.INTACT.markers Renin Cell.DKD.markers 0.245749286
## 20 Efferent VSMC.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.238030300
## 21 Afferent VSMC.INTACT.markers Efferent VSMC.DKD.markers 0.228765923
## 22 IG_Mesangial_Cell.INTACT.markers Afferent VSMC.DKD.markers 0.224417055
## 23 Afferent VSMC.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.139533018
## 24 IG_Mesangial_Cell.INTACT.markers Renin Cell.DKD.markers 0.132890962
## 25 Afferent VSMC.INTACT.markers Renin Cell.DKD.markers 0.125052174
## 26 Afferent VSMC.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.113107091
## 27 Efferent VSMC.INTACT.markers Renin Cell.DKD.markers 0.108523435
## 28 Renin Cell.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.099814663
## 29 Pericyte.INTACT.markers EG_Mesangial_Cell.DKD.markers 0.052345211
## 30 EG_Mesangial_Cell.INTACT.markers Renin Cell.DKD.markers 0.046251195
## 31 Renin Cell.INTACT.markers Efferent VSMC.DKD.markers 0.043587162
## 32 Efferent VSMC.INTACT.markers Pericyte.DKD.markers 0.037838104
## 33 Renin Cell.INTACT.markers Afferent VSMC.DKD.markers 0.032801618
## 34 Renin Cell.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.019154722
## 35 Pericyte.INTACT.markers IG_Mesangial_Cell.DKD.markers 0.010812252
## 36 Pericyte.INTACT.markers Efferent VSMC.DKD.markers 0.001762716
## Slope Shared_DEGs INTACT_UniqueDEGs DKD_UniqueDEGs
## 1 0.63940271 205 361 41
## 2 0.70588884 288 340 72
## 3 0.71307954 202 277 52
## 4 0.61774415 121 297 46
## 5 0.63103536 271 406 66
## 6 0.97918306 157 165 110
## 7 -0.55003709 196 370 71
## 8 -0.63666837 163 255 91
## 9 0.49583190 172 505 74
## 10 -0.45789929 192 485 75
## 11 0.94078811 151 171 209
## 12 0.50552533 199 367 138
## 13 -0.43613374 178 388 76
## 14 -0.43452605 182 446 72
## 15 -0.45170043 205 361 155
## 16 -0.35489091 174 503 80
## 17 -0.48657973 224 255 136
## 18 -0.59620799 122 200 124
## 19 -0.36347404 104 375 63
## 20 -0.58180205 132 190 205
## 21 0.35786872 166 462 101
## 22 -0.34887895 225 452 135
## 23 -0.29089127 185 443 152
## 24 -0.21074614 114 563 53
## 25 0.23297370 114 514 53
## 26 -0.23599981 163 465 83
## 27 0.38895520 84 238 83
## 28 0.27028492 115 303 131
## 29 -0.19768459 151 328 95
## 30 -0.13374036 112 454 55
## 31 -0.17619234 127 291 140
## 32 -0.22231555 136 186 118
## 33 0.16194158 152 266 208
## 34 -0.12952710 138 280 199
## 35 -0.10286346 167 312 170
## 36 0.03709079 152 327 115
# Display all scatterplots
for (plot_name in names(scatterplots)) {
print(scatterplots[[plot_name]])
}df <- rsq_table %>%
dplyr::select(INTACT, DKD, "R-squared") %>%
mutate(INTACT = sub("_Named_", " ", INTACT)) %>%
mutate(DKD = sub("_Named_", " ", DKD)) %>%
pivot_wider(names_from = DKD, values_from = "R-squared") %>%
column_to_rownames(var = "INTACT") %>%
as.matrix()
library(corrplot)
## Correlation Plot
corrplot(df, method = 'color')p1 <- DimPlot(SO.DKD, reduction = "umap", cols = very_light_population_colors) +
ylab("UMAP 2") +
xlab("UMAP 1") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
axis.line = element_line(size = 1, colour = "black"),
axis.text = element_blank(), # Remove axis text
axis.ticks = element_blank(), # Optional: Remove axis ticks
text = element_text(size = 20)
) + ggtitle("UMAP - DKD Contractile Clusters")
p2 <- DimPlot(SO.INTACT, reduction = "umap", group.by = "class.JGA", cols = population_colors) +
ylab("UMAP 2") +
xlab("UMAP 1") +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, size = 20),
axis.line = element_line(size = 1, colour = "black"),
axis.text = element_blank(), # Remove axis text
axis.ticks = element_blank(), # Optional: Remove axis ticks
text = element_text(size = 20)
) + ggtitle("UMAP - INTACT Contractile Clusters")
print(p1)library(patchwork)
library(ggplot2)
library(patchwork)
Idents(SO.DKD) <- SO.DKD@meta.data$class.JGA
Idents(SO.INTACT) <- SO.INTACT@meta.data$class.JGA
Idents(SO.DKD) <- SO.DKD@meta.data$class.JGA
Idents(SO.INTACT) <- SO.INTACT@meta.data$class.JGA
markers.to.plot <- c("Nkain2",
"Col23a1", # Adora1 didn't look good
"Ren1",
"Hpse2",
"Tenm2",
"Tshz2")
#cluster_order <- c("Pericyte", "Efferent VSMC", "Afferent VSMC", "Renin Cell", "EG Mesangial Cell", "IG Mesangial Cell")
#SO.DKD@meta.data$class.JGA <- factor(SO.DKD@meta.data$class.JGA, levels = cluster_order)
p3 <- DotPlot(SO.DKD, features = markers.to.plot) +
coord_flip() +
ggtitle("Gene Expression Across Clusters - DKD") +
xlab("Clusters") + ylab("Marker Genes") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
p4 <- DotPlot(SO.INTACT, features = markers.to.plot) +
coord_flip() +
ggtitle("Gene Expression Across Clusters - INTACT") +
xlab("Clusters") + ylab("Marker Genes") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 14, face = "bold", hjust = 0.5))
p3xy.comp <- inner_join(IG_Mesangial_Cell.INTACT.markers, IG_Mesangial_Cell.DKD.markers, by = "gene")
df.upper <- subset(xy.comp, avg_log2FC.x > 1 & avg_log2FC.y > 1)
df.lower <- subset(xy.comp, avg_log2FC.x < -1 & avg_log2FC.y < -1)
model <- lm(avg_log2FC.y ~ avg_log2FC.x, data = xy.comp)
slope <- coef(model)["avg_log2FC.x"]
r_squared <- summary(model)$r.squared
library(ggplot2)
library(ggrepel)
xy.comp <- inner_join(IG_Mesangial_Cell.INTACT.markers, IG_Mesangial_Cell.DKD.markers, by = "gene")
p5 <- ggplot(xy.comp, aes(x = avg_log2FC.x, y = avg_log2FC.y, label = gene)) +
geom_point(color = "#636EFA", alpha = 0.6, size = 2.5) +
geom_point(data = df.upper, color = "#EF553B", size = 3.5) +
geom_point(data = df.lower, color = "#00CC96", size = 3.5) +
geom_smooth(method = "lm", color = "#1E90FF", linetype = "dashed", se = FALSE) +
geom_text_repel(data = rbind(df.upper, df.lower), segment.size = 0.2, segment.color = "grey50",
size = 5) +
annotate("text", x = min(xy.comp$avg_log2FC.x) + 0.2,
y = max(xy.comp$avg_log2FC.y) - 0.2,
label = paste0("R² = ", round(r_squared, 3), "\nSlope = ", round(slope, 3)),
color = "black", size = 6, hjust = 0) +
labs(
title = "Intraglomerular Mesangial Gene Expression: INTACT vs DKD",
x = "Average log2FC - INTACT IG Mesangial",
y = "Average log2FC - DKD IG Mesangial"
) +
theme_minimal(base_size = 16) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.title = element_text(face = "bold"),
axis.line = element_line(color = "black", size = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
p5library(dplyr)
library(tidyr)
library(ggplot2)
library(reshape2)
library(RColorBrewer)
rsq_table <- rsq_table %>%
mutate(
INTACT = gsub("\\.", " ", INTACT),
DKD = gsub("\\.", " ", DKD),
INTACT = gsub("INTACT markers", "", INTACT),
DKD = gsub("DKD markers", "", DKD),
INTACT = gsub("_", " ", INTACT),
DKD = gsub("_", " ", DKD)
)
df <- rsq_table %>%
dplyr::select(INTACT, DKD, `R-squared`) %>%
pivot_wider(names_from = DKD, values_from = `R-squared`) %>%
column_to_rownames(var = "INTACT") %>%
as.matrix()
cor_long <- melt(df)
p6 <- ggplot(cor_long, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white", size = 0.3) +
geom_text(aes(label = sprintf("%.2f", value)), size = 5, fontface = "bold",
color = ifelse(cor_long$value > 0.5, "white", "black")) +
scale_fill_gradientn(colors = rev(brewer.pal(9, "RdBu")),
limits = c(0, 1), name = "R²") +
theme_minimal(base_size = 16) +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 14, face = "bold", color = "black"),
axis.text.y = element_text(size = 14, face = "bold", color = "black"),
axis.title = element_text(size = 16, face = "bold"),
panel.grid = element_blank(), # No distracting grid lines
legend.position = "right",
legend.title = element_text(size = 14, face = "bold"),
legend.text = element_text(size = 12),
plot.title = element_text(size = 20, face = "bold", hjust = 0.5)
) +
labs(title = "Correlation of Contractile Cell Clusters (INTACT vs DKD)",
x = "DKD Clusters",
y = "INTACT Clusters")
p6## JWN Coding
# Define the desired order
cor_long$Var1 <- trimws(cor_long$Var1)
cor_long$Var2 <- trimws(cor_long$Var2)
# Convert Var1 and Var2 into ordered factors
cor_long$Var1 <- factor(cor_long$Var1, levels = c("Pericyte", "Efferent VSMC", "Afferent VSMC",
"Renin Cell", "EG Mesangial Cell", "IG Mesangial Cell"))
cor_long$Var2 <- factor(cor_long$Var2, levels = c("Pericyte", "Efferent VSMC", "Afferent VSMC",
"Renin Cell", "EG Mesangial Cell", "IG Mesangial Cell"))
# Plot
p6 <- ggplot(cor_long, aes(x = Var2, y = Var1, fill = value)) +
geom_tile(color = "white", size = 0.3) +
geom_text(aes(label = sprintf("%.2f", value)), size = 5, fontface = "bold",
color = ifelse(cor_long$value > 0.5, "white", "black")) +
scale_fill_gradientn(colors = rev(brewer.pal(9, "RdBu")),
limits = c(0, 1), name = "R²") +
theme_minimal(base_size = 16) +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 14, face = "bold", color = "black"),
axis.text.y = element_text(size = 14, face = "bold", color = "black"),
axis.title = element_text(size = 16, face = "bold"),
panel.grid = element_blank(),
legend.position = "right",
legend.title = element_text(size = 14, face = "bold"),
legend.text = element_text(size = 12),
plot.title = element_text(size = 20, face = "bold", hjust = 0.5)
) +
labs(title = "Correlation between INTACT vs DKD",
x = "DKD Clusters",
y = "INTACT Clusters") +
coord_fixed(ratio = .5)
p6## R version 4.4.3 (2025-02-28 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 22631)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=English_United States.utf8
## [2] LC_CTYPE=English_United States.utf8
## [3] LC_MONETARY=English_United States.utf8
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.utf8
##
## time zone: America/Los_Angeles
## tzcode source: internal
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] RColorBrewer_1.1-3 reshape2_1.4.4 corrplot_0.95
## [4] broom_1.0.7 ggrepel_0.9.6 ggvenn_0.1.10
## [7] gplots_3.2.0 gridExtra_2.3 sjmisc_2.8.10
## [10] openxlsx_4.2.8 lubridate_1.9.4 forcats_1.0.0
## [13] stringr_1.5.1 purrr_1.0.4 readr_2.1.5
## [16] tidyr_1.3.1 tibble_3.2.1 tidyverse_2.0.0
## [19] devtools_2.4.5 usethis_3.1.0 here_1.0.1
## [22] ggpmisc_0.6.1 ggpp_0.5.8-1 BiocManager_1.30.25
## [25] ggplot2_3.5.1 knitr_1.50 patchwork_1.3.0
## [28] SeuratObject_5.0.2 Seurat_4.4.0 dplyr_1.1.4
##
## loaded via a namespace (and not attached):
## [1] RcppAnnoy_0.0.22 splines_4.4.3 later_1.4.1
## [4] bitops_1.0-9 polyclip_1.10-7 lifecycle_1.0.4
## [7] rprojroot_2.0.4 globals_0.16.3 lattice_0.22-6
## [10] MASS_7.3-64 insight_1.1.0 backports_1.5.0
## [13] magrittr_2.0.3 plotly_4.10.4 sass_0.4.9
## [16] rmarkdown_2.29 jquerylib_0.1.4 yaml_2.3.10
## [19] remotes_2.5.0 httpuv_1.6.15 sctransform_0.4.1
## [22] spam_2.11-1 zip_2.3.2 sp_2.2-0
## [25] sessioninfo_1.2.3 pkgbuild_1.4.6 spatstat.sparse_3.1-0
## [28] reticulate_1.41.0.1 cowplot_1.1.3 pbapply_1.7-2
## [31] abind_1.4-8 pkgload_1.4.0 Rtsne_0.17
## [34] irlba_2.3.5.1 listenv_0.9.1 spatstat.utils_3.1-3
## [37] MatrixModels_0.5-3 goftest_1.2-3 spatstat.random_3.3-2
## [40] fitdistrplus_1.2-2 parallelly_1.42.0 leiden_0.4.3.1
## [43] codetools_0.2-20 tidyselect_1.2.1 farver_2.1.2
## [46] matrixStats_1.5.0 spatstat.explore_3.3-4 jsonlite_1.9.1
## [49] ellipsis_0.3.2 progressr_0.15.1 ggridges_0.5.6
## [52] survival_3.8-3 tools_4.4.3 ica_1.0-3
## [55] Rcpp_1.0.14 glue_1.8.0 xfun_0.51
## [58] mgcv_1.9-1 withr_3.0.2 fastmap_1.2.0
## [61] SparseM_1.84-2 caTools_1.18.3 digest_0.6.37
## [64] timechange_0.3.0 R6_2.6.1 mime_0.12
## [67] colorspace_2.1-1 scattermore_1.2 gtools_3.9.5
## [70] tensor_1.5 spatstat.data_3.1-6 generics_0.1.3
## [73] data.table_1.17.0 httr_1.4.7 htmlwidgets_1.6.4
## [76] uwot_0.2.3 pkgconfig_2.0.3 gtable_0.3.6
## [79] lmtest_0.9-40 htmltools_0.5.8.1 profvis_0.4.0
## [82] dotCall64_1.2 scales_1.3.0 png_0.1-8
## [85] spatstat.univar_3.1-2 rstudioapi_0.17.1 tzdb_0.5.0
## [88] nlme_3.1-167 cachem_1.1.0 zoo_1.8-13
## [91] sjlabelled_1.2.0 KernSmooth_2.23-26 parallel_4.4.3
## [94] miniUI_0.1.1.1 pillar_1.10.1 vctrs_0.6.5
## [97] RANN_2.6.2 urlchecker_1.0.1 promises_1.3.2
## [100] xtable_1.8-4 cluster_2.1.8 evaluate_1.0.3
## [103] cli_3.6.4 compiler_4.4.3 rlang_1.1.5
## [106] future.apply_1.11.3 labeling_0.4.3 plyr_1.8.9
## [109] fs_1.6.5 stringi_1.8.4 viridisLite_0.4.2
## [112] deldir_2.0-4 munsell_0.5.1 lazyeval_0.2.2
## [115] spatstat.geom_3.3-5 quantreg_6.1 Matrix_1.7-2
## [118] hms_1.1.3 future_1.34.0 shiny_1.10.0
## [121] ROCR_1.0-11 igraph_2.1.4 memoise_2.0.1
## [124] bslib_0.9.0 polynom_1.4-1